﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Clases;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Logica.Comandos.ComadoProyecto;
using Sistema_Totem.Logica.Comandos.ComandoConfiguracion;
using Sistema_Totem.Logica.Comandos.ComandoPropuesta;
using Sistema_Totem.Logica.Comandos.ComandoRequerimiento;
using Sistema_Totem.Logica.Comandos.ComandoLogin;
using Sistema_Totem.Logica.Comandos.ComandoPlantilla;
using System.Web.UI.WebControls;
using AjaxControlToolkit;

namespace Sistema_Totem.Logica.Fabricas
{
    public class FabricaComando
    {

        #region Grupo Propuesta

        public static Comando<bool> CrearComandoAgregarPropuesta(Entidad _entidad, int _idProyecto)
        {
            return new ComandoAgregarPropuesta(_entidad, _idProyecto);
        }

        public static Comando<bool> CrearComandoEliminarPropuesta(int _idProyecto)
        {
            return new ComandoEliminarPropuesta(_idProyecto);
        }

        public static Comando<Entidad> CrearComandoConsultarPropuesta(int _idPropuesta)
        {
            return new ComandoConsultarPropuesta(_idPropuesta);
        }

        public static Comando<bool> CrearComandoModificarPropuesta(Entidad _entidad, int _idProyecto)
        {
            return new ComandoModificarPropuesta(_entidad, _idProyecto);
        }

        public static Comando<bool> CrearComandoVerificarPropuesta(int _idProyecto)
        {
            return new ComandoVerificarPropuesta(_idProyecto);
        }

        public static Comando<Entidad> CrearComandoConsultarPlantillaPropuesta(int _idProyecto)
        {
            return new ComandoConsultarPlantillaPropuesta(_idProyecto);
        }

        #endregion Grupo Propuesta

        #region Grupo Login y Proyecto

        public static Comando<bool> CrearComandoAgregarProyecto(Entidad _entidad, Entidad _usuario)
        {
            return new ComandoAgregarProyecto(_entidad,_usuario);
        }

        public static Comando<Entidad> CrearComandoConsultarProyecto(int _idProyecto)
        {
            return new ComandoConsultarProyecto(_idProyecto);
        }

        public static Comando<bool> CrearComandoModificarProyecto(Entidad _entidad)
        {
            return new ComandoModificarProyecto(_entidad);
        }

        public static Comando<Entidad> CrearComandoConsultarCliente(int _idProyecto)
        {
            return new ComandoConsultarCliente(_idProyecto);
        }

        public static Comando<Entidad> CrearComandoConsultarInvolucrado(int _idInvolucrado)
        {
            return new ComandoConsultarInvolucrado(_idInvolucrado);
        }

        public static Comando<Entidad> CrearComandoConsultarRol(int _idRol)
        {
            return new ComandoConsultarRol(_idRol);
        }

        public static Comando<Entidad> CrearComandoConsultarUsuario(int _idUsuario)
        {
            return new ComandoConsultarUsuario(_idUsuario);
        }

        public static Comando<List<Entidad>> CrearComandoConsultarTodosLosProyectos(int _idUsuario)
        {
            return new ComandoConsultarTodosProyectos(_idUsuario);
        }

        public static Comando<bool> CrearComandoValidarUsuario(string _userName,string _password)
        {
            return new ComandoValidarUsuario(_userName,_password);
        }

        public static Comando<Entidad> CrearComandoRecuperarPassword(string _userName)
        {
            return new ComandoRecuperarPassword(_userName);
        }

        public static Comando<bool> CrearComandoModificarPassword(string _userName, string _password)
        {
            return new ComandoModificarPassword(_userName,_password);
        }

        public static Comando<int> CrearComandoConsultarIdUsuario(string _userName, string _password)
        {
            return new ComandoConsultarIdUsuario(_userName, _password);
        }

        public static Comando<List<Entidad>> CrearComandoConsultarTodosLosClientes()
        {
            return new ComandoConsultarTodosLosClientes();
        }

        public static Comando<Entidad> CrearComandoConsultarProyectoPorNombre(string _nombreProyecto)
        {
            return new ComandoConsultarProyectoPorNombre(_nombreProyecto);
        }

        public static Comando<List<Entidad>> CrearComandoConsultarTodosLosInvolucrados()
        {
            return new ComandoConsultarTodosLosInvolucrados();
        }

        public static Comando<List<Entidad>> CrearComandoConsultarInvolucradosProyecto(int _idProyecto)
        {
            return new ComandoConsultarInvolucradosProyecto(_idProyecto);
        }

        public static Comando<List<Entidad>> CrearComandoConsultarInvolucradosNoProyecto(int _idProyecto)
        {
            return new ComandoConsultarInvolucradosNoProyectoComando(_idProyecto);
        }

        public static Comando<List<Entidad>> CrearComandoConsultarClientesNoProyecto(int _idProyecto)
        {
            return new ComandoConsultarClientesNoProyecto(_idProyecto);
        }

        #endregion

        #region Grupo Requerimiento

        /// <summary>
        /// Comando que agrega un requerimiento.
        /// </summary>
        /// <param name="_requerimiento"></param>
        /// <returns></returns>
        public static Comando<bool> 
            CrearComandoAgregarRequerimiento(Entidad _requerimiento, int _idProyecto)
        {
            return new ComandoAgregarRequerimiento(_requerimiento, _idProyecto);
        }

        /// <summary>
        /// Comando que elimina un requerimiento.
        /// </summary>
        /// <param name="_requerimiento"></param>
        /// <returns></returns>
        public static Comando<bool> 
            CrearComandoEliminarRequerimiento(int _idRequerimiento)
        {
            return new ComandoEliminarRequerimiento(_idRequerimiento);
        }

        /// <summary>
        /// Comando que me consulta un reuqrimiento.
        /// </summary>
        /// <param name="_requerimiento"></param>
        /// <returns></returns>
        public static Comando<List<Requerimiento>> 
            CrearComandoConsultarRequerimiento(int _idProyecto)
        {
            return new ComandoConsultarRequerimiento(_idProyecto);
        }

        /// <summary>
        /// Comando que me consulta la plantilla 
        /// predeterminada del requerimiento
        /// </summary>
        /// <returns></returns>
        public static Comando<Requerimiento>
            CrearComandoConsultarPlantillaRequerimiento(int _IdProyecto)
        {
            return new ComandoConsultarPlantillaRequerimiento(_IdProyecto);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="_requerimiento"></param>
        /// <returns></returns>
        public static Comando<bool> 
            CrearComandoModificarRequerimiento(Entidad _requerimiento)
        {
            return new ComandoModificarRequerimiento(_requerimiento);
        }

        #endregion Grupo Requerimiento

        #region Grupo Plantilla

        public static Comando<Entidad> CrearComandoAgregarPlantillaPasoUno(String _nombre, String _descripcion, String _tipo, String _estado)
        {
            return new ComandoAgregarPlantillaPasoUno(_nombre,_descripcion,_tipo,_estado);
        }

        public static Comando<Entidad> CrearComandoAgregarPlantillaPasoDos(Panel _panel3, Panel _panel4, Entidad _plantilla)
        {
            return new ComandoAgregarPlantillaPasoDos(_panel3, _panel4, _plantilla);
        }

        public static Comando<Entidad> CrearComandoAgregarPlantillaPasoTres(Accordion _accordionCtrl, Entidad _plantilla)
        {
            return new ComandoAgregarPlantillaPasoTres(_accordionCtrl, _plantilla);
        }

        public static Comando<Entidad> CrearComandoAgregarPlantilla(Entidad _plantilla)
        {
            return new ComandoAgregarPlantilla(_plantilla);
        }

        public static Comando<List<Entidad>> CrearConsultar()
        {
            return new ComandoConsultar();
        }

        public static Comando<List<String>> CrearPintar(int id)
        {
            return new ComandoPintarXml(id);
        }
        #endregion Grupo Plantilla
    }
}